package middlewares

import (
	"e_mall_server/common"
	"e_mall_server/controller/admin"
	"github.com/gin-gonic/gin"
	"go.uber.org/zap"
)

/**
 * @Author: zhaobin
 * @Description 管理员jwt权限判断的中间件
 * @Date: 2022-04-26 11:56
 */

// JWTManagerAuthMiddleware 管理员jwt权限判断的中间件
func JWTManagerAuthMiddleware(c *gin.Context) {
	// 客户端携带Token有三种方式 1.放在请求头 2.放在请求体 3.放在URI
	// 这里假设Token放在Header的Authorization中，并使用Bearer开头
	// 这里的具体实现方式要依据你的实际业务情况决定
	authHeader := c.Request.Header.Get("Authorization")
	if authHeader == "" {
		admin.ResponseError(c, "请先登陆")
		c.Abort()
		return
	}
	zap.L().Debug("token数据", zap.Any("value", authHeader))
	// 使用之前定义好的解析JWT的函数来解析它
	mc, err := common.ParseToken(authHeader)
	if err != nil {
		zap.L().Error("error", zap.Error(err))
		admin.ResponseError(c, "无效的token")
		c.Abort()
		return
	}
	// 将当前请求的userID、username信息保存到请求的上下文c上
	c.Set(common.ContextManagerIDKey, mc.UserID)
	c.Next() // 后续的处理函数可以用过c.Get("username")来获取当前请求的用户信息
}
